package com.tbit.uqbike.client.service;

import com.tbit.common.entity.UserAccountMoney;
import com.tbit.uqbike.client.pojo.RideLogDetails;
import com.tbit.uqbike.client.pojo.User;

import java.util.List;

/**
 * @Author: chen
 * @Description:
 * @Date: 创建于 14:07 2022/11/23
 */
public interface UserAccountMoneyService {

    /**
     * 新增
     *
     * @param user      用户
     * @param money     变动金额
     * @param moneyType 金额类型
     * @param accountId 区域id
     */
    void insert(User user, Long money, Integer moneyType, Integer accountId, Integer patType);

    /**
     * 更新欠款金额为0
     *
     * @param brandId
     * @param accountId
     * @param dateTime
     * @param userId
     */
    void editRideMoney(Integer brandId, Integer accountId, Long dateTime, Integer userId);

    /**
     * 更新用户余额
     *
     * @param user      用户信息
     * @param orderNO   订单编号
     * @param money     变动金额
     * @param moneyType 金额类型
     * @param accountId 区域id
     * @param patType   支付类型
     */
    void editMoney(User user, String orderNO, Long money, Integer moneyType, Integer accountId, Integer patType, Long dateTime, String remark
            , Integer businessType);

    /**
     * 查询用户指定区域金额
     *
     * @param userId
     * @param moneyType
     * @param accountId
     * @return
     */
    UserAccountMoney getByAccountId(Integer userId, Integer moneyType, Integer accountId);

    /**
     * 查询用户所有区域金额
     *
     * @param userId    用户id
     * @param moneyType 金额类型
     * @return
     */
    List<UserAccountMoney> getByUserIdAndBrandId(Integer userId, Integer moneyType);

    /**
     * 删除
     *
     * @param userId
     */
    void del(Integer userId, Integer moneyType, Integer accountId);

    /**
     * 修改用户区域欠款 + 插入对应欠款变动流水
     * @param afterRideMoney 修改前欠款
     * @param endMoney 修改后欠款
     * @param userId 用户id
     * @param accountId 区域id
     * @param time 更新时间
     * @param user 用户信息
     * @param rideLogDetails 订单信息
     */
    void updateRideMoney(Long afterRideMoney, Long endMoney, Integer userId, Integer accountId, Long time,User user, RideLogDetails rideLogDetails);
}
